什么是架构设计
架构设计是一个过程:将系统划分为许多小的组件或模块,确定这些部分如何交互协作来完成业务目标。架构本身不是软件,而是关于软件设计的策略——是对整体结构和组件的抽象描述。架构设计的最终目的是用最小的成本来满足构建和维护系统的需求,解决软件系统的复杂度问题。
从前端演进理解架构的必要性
前端的发展历程就是复杂度驱动架构演进的典型案例:
- 早期:一个HTML文件 + 一个JS文件 + 一个CSS文件,页面就做完了
- 中期:页面增多、交互变复杂,需要CLI工具和框架来管理
- 现在:单页应用、微前端、服务端渲染,系统复杂度指数级增长
服务端同样经历了从单体应用到微服务架构的演进。早期一台服务器装上数据库就能运行,但随着业务量增长,单台服务器的物理资源(网络带宽、IO性能、磁盘读写速度、CPU处理能力)总有上限,必须用多台设备来协同处理——这就是架构设计的核心驱动力。
架构设计的常见坑点
- 需求未明确:只关注功能性需求,忽略非功能性需求
- 过度设计:架构设计文档信息过度,不适合未来需求变更和迭代
- 追寻大公司方案:忽视自己团队的技术能力、运维能力和业务体量。选择经济适用的方案,快速试错,根据团队能力和资源进行合理投入
- 喜新厌旧:过于追求新技术,忽视现有技术的优势和适用性、团队的协作能力和业务理解能力。选择新技术时要考虑近期和远期优势、对业务效率的影响、可能产生的技术债务
- 脱离实践:理论来源于实践,纸上谈兵无法达到预期效果。架构方案需要考虑如何落地——制定短中长期规划,梳理上下游业务依赖,确定团队配置
架构设计的核心套路
架构设计不是玄学,它有明确的方法论和套路。核心是回答三个问题:
- 系统有哪些组件:识别系统的模块边界
- 组件如何交互:定义组件间的通信方式和数据流
- 如何应对复杂度:在性能、可用性、安全性、可扩展性之间做权衡
架构设计的思维方式
架构师需要具备的不仅是技术能力,更重要的是系统化的思维方式:
全局视角:不只看单个模块,而是理解整个系统的运转逻辑。就像前端工程师不能只关注页面效果,还需要理解数据流转、接口设计、部署流程。
权衡意识:每个架构决策都是在多个指标之间做平衡。高性能意味着高成本,高可用意味着系统复杂度增加,强安全意味着开发效率降低。
演进思维:好的架构不是一蹴而就的,而是随着业务发展持续演进的。不要过度设计,也不要欠设计——满足当前需求的同时为未来扩展留出空间。
前端工程师为什么要学架构
学习架构设计对前端工程师有三个层面的价值:
第一层:拓宽视野。理解服务端同学的技术世界,知道他们在关注什么——高并发、负载均衡、缓存策略、数据库分库分表等。这样在跨团队协作时能更高效地沟通。
第二层:提升技术深度。架构思维让你从"写功能"跃迁到"设计系统"。理解了架构原理后,即使是前端开发也能做出更好的模块划分、接口设计、状态管理方案。
第三层:职业发展。当有一天走向技术负责人或技术总监的位置时,需要从全局视角审视系统的设计和业务系统的规划。架构设计能力是这个角色的核心竞争力。
架构类型
从质量角度,架构设计是用最小的资源满足业务需求。架构类型包括:
- 系统架构:确定系统的总体结构,包括软件组件、硬件组件、网络、数据存储等
- 软件架构:设计软件的高层结构,确定主要组件及其交互方式(如MVC、微服务等)
- 数据架构:确定如何存储、处理、访问和保护数据(数据库模式、数据流程图)
- 网络架构:设计系统中的通信网络(网络设备、协议、路由策略)
- 安全架构:确定如何保护系统和数据(安全策略、加密、身份验证、授权)
架构设计的常见模式
层次型架构模式
三层架构:将应用程序分为表示层(用户界面)、业务逻辑层和数据访问层。每一层都有特定职责,可独立开发和测试。
N层架构:三层架构的扩展,可根据需要增加额外层。例如复杂企业级应用可能包括用户界面层、应用层、业务逻辑层、数据访问层和数据库层。
数据流型架构模式
管道和过滤器模式:数据经过一系列处理阶段,每个阶段是一个过滤器,可以进行转换、过滤或排序操作,然后将结果传递给下一个阶段。
模块型架构模式
微服务架构:将应用分解为一组小的、独立的服务,每个服务运行在自己的进程中,服务间通过HTTP REST或消息队列等轻量级机制交互。
事件驱动型架构模式
发布/订阅模式:发布者产生事件并发布,订阅者订阅感兴趣的事件,事件发生时收到通知。
观察者模式:一个对象(主题)维护依赖于它的对象(观察者)列表,状态变更时通知所有观察者。
分布式系统架构模式
主-从架构:主服务器执行所有读写操作,同步数据到一个或多个从服务器。
分布式数据模式:数据分布在多个节点上,每个节点负责一部分数据。
服务定位模式:包含服务注册表,服务提供者注册可用性,服务消费者查询注册表找到所需服务。
用户界面设计模式
MVC(模型-视图-控制器):将应用程序的数据、用户界面和用户输入分开。模型代表数据,视图是用户界面,控制器处理输入。
MVVM(模型-视图-视图模型):视图模型是包含视图所需状态和行为的抽象,用于分离UI逻辑和业务逻辑。
架构设计的核心指标
| 指标 | 含义 | 实现手段 |
|---|---|---|
| 高性能 | 系统响应快、吞吐量大 | 缓存、CDN、异步处理、数据库优化 |
| 高可用 | 系统持续可用,故障少 | 冗余部署、自动故障转移、熔断降级 |
| 高安全 | 数据安全、访问可控 | 认证授权、加密传输、WAF防火墙 |
| 可扩展 | 方便增加新功能或扩容 | 模块化设计、微服务、容器化 |
| 可维护 | 代码清晰、易于理解和修改 | 代码规范、文档完善、测试覆盖 |
架构设计工具
UML工具
| 工具 | 特点 |
|---|---|
| Visual Paradigm | 中文界面,支持UML、SysML、ERD,适合敏捷开发和DevOps |
| StarUML | 轻量级,界面清晰,支持自动布局和插件 |
| Visio | 微软出品,界面友好,操作简单,适合初学者和专业人士 |
| Lucidchart | 基于Web,支持实时协作,无需安装 |
业务流程建模工具
| 工具 | 特点 |
|---|---|
| ProcessOn | 基于Web的中文工具,支持BPMN、UML,支持实时协作 |
| draw.io (diagrams.net) | 免费开源在线绘图工具,支持流程图、序列图、ER图等 |
| Bizagi Modeler | 专业BPMN标准工具,可创建和分享业务流程图 |
系统架构设计工具
| 工具 | 特点 |
|---|---|
| Archi | 开源企业架构工具,支持TOGAF和ArchiMate框架 |
| Sparx Enterprise Architect | 全面企业架构工具,支持UML、BPMN、SysML等 |
数据库设计工具
| 工具 | 特点 |
|---|---|
| Navicat | 支持MySQL、PostgreSQL等,提供中文界面 |
| PowerDesigner | 支持物理、逻辑、概念三层建模,有中文版本 |
| MySQL Workbench | MySQL官方设计工具,可创建ER图 |
需求管理工具
| 工具 | 特点 |
|---|---|
| JIRA | 流行的项目和需求管理工具,支持敏捷开发,中文版 |
| 飞书 | 集成文档、表格、邮件、日历和即时通讯的协作平台 |
| 禅道 | 项目管理软件,适合软件开发团队,支持敏捷开发 |
原型设计工具
| 工具 | 特点 |
|---|---|
| Axure RP | 功能强大,支持动态交互和条件逻辑,中文版 |
| 墨刀 | 国产工具,简单易用,支持拖放操作 |
| 蓝湖 | 设计协作平台,自动化标注,一键切图 |
架构验证
架构设计验证是确保设计满足所有功能和非功能需求的关键步骤:
- 架构评审:团队内部或外部专家评估架构是否满足需求,是否具有良好的可扩展性
- 模拟和原型:创建架构原型帮助理解架构工作方式,验证性能和可扩展性
- 架构完整性检查:检查所有组件和服务是否有明确职责,所有接口和依赖是否已定义
- 架构决策记录(ADR):记录架构设计和决策,帮助团队跟踪变化,确保决策有明确理由
- 自动化测试:验证系统各部分是否按预期工作,整个系统是否满足性能和可靠性需求
RAID架构验证工件
RAID是Risk(风险)、Assumption(假设)、Issue(问题)和Dependency(依赖)的缩写:
- 风险:架构设计和实施过程中可能出现的潜在问题或不确定性
- 假设:基于推断或预设的前提条件,涉及系统环境、性能需求、技术可行性等
- 问题:遇到的具体问题、障碍或挑战
- 依赖:架构设计和实施中存在的外部系统、组件、数据等依赖关系
ADR与RAID的区别
ADR(架构决策记录)主要关注架构决策的记录,包括动机、选项、结果,提供可追溯性。RAID关注识别和管理过程中的风险、假设、问题和依赖关系。ADR可以包含RAID中的一些因素,两者相互关联但关注点和目的不同。
架构落地
将架构设计落地需要以下策略:
- 制定清晰的计划:包括各阶段目标、时间表、所需资源,以及处理问题和风险的预案
- 增量和迭代实施:避免一次性大规模变更,通过增量迭代降低风险,快速获取反馈
- 培训和教育:为团队成员提供新技术或概念的培训
- 持续的沟通和反馈:保持开放沟通,确保所有人理解新架构,收集反馈建议
- 使用适当的工具和技术:版本控制(Git)、CI/CD工具、测试和监控工具
- 测量和评估:制定度量标准评估新架构的效果(性能、可靠性、可维护性等)
架构演进
架构演进是对系统架构进行演化和优化的过程。常见的三种演进模式:
- 拆迁者模式(Breaker Pattern):当现有系统无法满足需求时,彻底重构和重新设计。短期内可能导致不稳定,但长期可获得更好的可维护性
- 绞杀者模式(Strangler Pattern):在现有系统中逐步引入新架构和技术,通过渐进式迁移替换,逐渐"扼杀"旧架构,保持系统稳定性
- 修缮者模式(Mender Pattern):对现有系统进行小规模修改和优化,修复问题并增强可维护性和可扩展性。适合已经稳定但需要持续维护的系统
架构设计方法论
ADMEMS方法论
ADMEMS(Architecture Design Method has been Extended to Method System)涵盖完整的架构设计过程,包括"需求导入、架构导出"的三个阶段和一个环节:
- PA阶段(预备架构):全面理解需求,把握需求特性,确定架构设计的驱动力。ADMEMS矩阵是核心工具
- CA阶段(概念架构):考虑所有需求(功能、质量和约束),进行概念架构设计
- RA阶段(精化架构):五个视图方法,涵盖逻辑架构、物理架构、开发架构、运行架构和数据架构
ADMEMS还提供完整的文档模板,涉及架构描述、设计目标、设计原则和各架构视图。
ABSD方法论
ABSD(Architecture-Based Software Design)基于架构的软件设计方法,三个基础是功能分解、通过选择架构风格实现质量和业务需求、软件模板的使用。
ABSD模型将软件过程划分为:架构需求 → 设计 → 文档化 → 复审 → 实现 → 演化。
DSSA方法论
DSSA(Domain-Driven System Architecture)基于领域驱动设计(DDD)的架构方法论,核心思想是将领域驱动设计的原则应用于整个系统架构设计。实施步骤:
- 理解业务领域
- 定义领域上下文(界限上下文)
- 构建领域模型
- 设计领域服务
- 定义聚合根
- 确定架构模式和技术
- 实施和迭代
↑